home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
051-075
/
disk_073
/
add
/
until.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
4KB
|
117 lines
/*
* This is a short program which will wait until a particular window
* is opened, or until a certain amount of time has passed.
*
* Specify -m at the end to wait until the window has finished setting
* its menu structure.
*
* Usage : until <window> <seconds> [ <-m> ]
*
* NB: Window name is case sensitive; for multi-word names, only the first
* is checked, so if name is "My Window" use "My" when invoking "until".
*/
/*
* Use of this program? Anytime you run one application that opens windows,
* and then want to start another, but not until the first has opened its
* window (and optionally constructed a menulist). Could also be used to
* reduce disk grinding (hey, this is a neat idea I just thought of!):
*
* run Scribble! ;fine and dandy
* until Scribble! 20 ;wait till loaded, or 20 secs if load fails
* run Pagesetter ;I'll imagine I have lots of ram
*
* This works well as a companion to ADD, so you can construct script files
* that run a program like Scribble or Pagesetter, wait until they have
* finished loading, and then do an addbuffers and add some keyboard
* shortcuts:
*
* run df1:vt100 ;start it up
* until VT100 20 -m ;wait until it loads, gets ser: device, and
* ;constructs menu
* addbuffers df0: 20
* add VT100 1 1 C ;create keyboard shortcuts
* etc.
*
* Copyright ((c)) 1987, John Russell. Unlimited distribution.
*/
#include <intuition/intuition.h>
struct IntuitionBase *IntuitionBase; /* actually has a use! */
struct Window *findwindow();
main(argc, argv)
int argc;
char *argv[];
{
struct Window *open;
int seconds,x;
if (!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))) {
puts("No intuition library.\n");
exit(0);
}
if ((argc < 3) || (argc > 4)) { /* instructions */
puts("Usage: until <window> <seconds> [ <-m> ]\n");
CloseLibrary(IntuitionBase);
exit(0);
}
seconds = atoi(argv[2]);
for (x=0; x<2*seconds; x++) { /* check every 1/2 second */
if (open = findwindow(argv[1])) { /* if window open yet */
/* now is menu bar set (or doesn't user care)? */
if (open->MenuStrip || (argc==3) || compare(argv[3],"-m")) {
goto end;
}
}
Delay(25); /* half a second or so */
}
puts("Timeout - window did not open.");
end:
CloseLibrary(IntuitionBase);
}
struct Window *findwindow(title)
char *title;
{
struct Screen *Screen;
struct Window *Window;
Forbid(); /* just to be safe, disable interrupts */
/* now loop through all screens/windows */
for (Screen=IntuitionBase->FirstScreen; Screen; Screen=Screen->NextScreen) {
for (Window=Screen->FirstWindow; Window; Window=Window->NextWindow) {
/* if found, return window pointer so we can check menu status */
if (!compare(Window->Title,title)) {
Permit(); /* what happens if I don't do this, hm? */
return(Window);
}
}
}
Permit();
return(0L);
}
compare(string1,string2) /* compare strings that end with nulls or spaces */
char *string1,*string2;
{
while ((*string1 != '\0') && (*string1 != ' ')) {
if (*string1 != *string2)
return(1);
string1++;
string2++;
}
return(0); /* return reverse of intuitive value, as strcmp does */
}